/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans.dao;

import beans.DiscapacidadTratamiento;
import beans.MedicamentoDiscapacidad;
import core.bd;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author Usuario
 */
public class MedicamentoDiscapacidadDAO {
       
    public static void guardarItem(MedicamentoDiscapacidad med) throws Exception{
        Connection conexion = null;
        PreparedStatement statement = null;
        
        try{
            conexion = bd.getConexion();
            statement = conexion.prepareStatement("INSERT INTO medicamento_discapacidad( "+
            "id_medicamento, id_discapacidad_tratamiento, dosis, dosis_medida_tiempo, uso, "
                    + "uso_medida_tiempo, observacion, fecha_inicio, estado) VALUES "
                    + "(?, ?, ?, ?, ?, ?, ?, ?, ?);");
            statement.setInt(1, med.getIdMedicamento());
            statement.setInt(2, med.getDiscapacidadTratamiento().getId());
            statement.setInt(3, med.getDosis());
            statement.setInt(4, med.getDosisMedidaTiempo());
            statement.setInt(5, med.getUso());
            statement.setInt(6, med.getUsoMedidaTiempo());
            statement.setString(7, med.getObservacion());
            statement.setDate(8, new java.sql.Date(
                    med.getFechaInicio().getTime()));
//            statement.setDate(9, new java.sql.Date(
//                    med.getFechaFin().getTime()));
            statement.setString(9, med.getEstado().getDesc());
            
            statement.executeUpdate();
        }catch(SQLException e){
            e.printStackTrace();
            throw new Exception(String.format(
                    "No se pudo guardar Medicamento %s", med.getMedicamento()));
        }finally{
//            bd.liberaConexion(conexion);
//            bd.liberarStatement(statement);
        }
    }
    
    public static void actualizarItem(MedicamentoDiscapacidad med) {
        Connection conexion = null;
        PreparedStatement statement = null;

        try {
            conexion = bd.getConexion();
            statement = conexion.prepareStatement("UPDATE medicamento_discapacidad "
                    + "SET id_medicamento=?, id_discapacidad_tratamiento=?, "
                    + "dosis=?, dosis_medida_tiempo=?, uso=?, "
                    + "uso_medida_tiempo=?, observacion=?, "
                    + "fecha_fin=?, estado=? WHERE id_medicamento_discapacidad = ?;");
            statement.setInt(1, med.getIdMedicamento());
            statement.setInt(2, med.getDiscapacidadTratamiento().getId());
            statement.setInt(3, med.getDosis());
            statement.setInt(4, med.getDosisMedidaTiempo());
            statement.setInt(5, med.getUso());
            statement.setInt(6, med.getUsoMedidaTiempo());
            statement.setString(7, med.getObservacion());
//            statement.setDate(8, new java.sql.Date(
//                    med.getFechaInicio().getTime()));
            if(null != med.getFechaFin()){
                statement.setDate(8, new java.sql.Date(
                        med.getFechaFin().getTime()));
            }
            statement.setString(9, med.getEstado().getDesc());
            statement.setInt(10, med.getId());
            
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
//            bd.liberaConexion(conexion);
//            bd.liberarStatement(statement);
        }
    }
    
    public static void actualizarEstadoItem(MedicamentoDiscapacidad med) throws Exception {
        Connection conexion = null;
        PreparedStatement statement = null;

        try {
            conexion = bd.getConexion();
            statement = conexion.prepareStatement("UPDATE medicamento_discapacidad "
                    + "SET estado=? WHERE id_medicamento_discapacidad = ?;");
            statement.setString(1, med.getEstado().getDesc());
            statement.setInt(2, med.getId());

            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            throw new Exception("No su pudo actualizar estado del medicamento");
        } finally {
//            bd.liberaConexion(conexion);
//            bd.liberarStatement(statement);
        }
    }
    
    public static Set<MedicamentoDiscapacidad> getMedicamentos(){
        
        return null;
    }
    
    public static Set<MedicamentoDiscapacidad> getMedicamentos(
            DiscapacidadTratamiento discapacidadTratamiento) {

        Set<MedicamentoDiscapacidad> medicamentos =
                new HashSet<MedicamentoDiscapacidad>();
        Connection conexion = null;
        PreparedStatement statement = null;
        ResultSet rs=null;
        MedicamentoDiscapacidad medicamento = new MedicamentoDiscapacidad();
        
        try{
            conexion = bd.getConexion();
            statement = conexion.prepareStatement(""
                    + "select medicamento_discapacidad.*, medicamento.nombre from medicamento_discapacidad natural join medicamento "
                    + "where id_discapacidad_tratamiento = ?");
            statement.setInt(1, discapacidadTratamiento.getId());
            rs = statement.executeQuery();
            while(rs.next()){
                medicamento.setId(rs.getInt("id_medicamento_discapacidad"));
                medicamento.setIdMedicamento(rs.getInt("id_medicamento"));
                medicamento.setDiscapacidadTratamiento(discapacidadTratamiento);
                medicamento.setDosis(rs.getInt("dosis"));
                medicamento.setDosisMedidaTiempo(rs.getInt("dosis_medida_tiempo"));
                medicamento.setUso(rs.getInt("uso"));
                medicamento.setUsoMedidaTiempo(rs.getInt("uso_medida_tiempo"));
                medicamento.setObservacion(rs.getString("observacion"));
                medicamento.setFechaInicio(rs.getDate("fecha_inicio"));
                medicamento.setFechaFin(rs.getDate("fecha_inicio"));
                medicamento.setMedicamento(rs.getString("nombre"));
                
                String string = rs.getString("estado");
//                MedicamentoDiscapacidad.Estado estado = null;
//                if(string.equals(MedicamentoDiscapacidad.Estado.ACTIVO.getDesc()))
//                    estado = MedicamentoDiscapacidad.Estado.ACTIVO;
//                else
//                    estado = MedicamentoDiscapacidad.Estado.INACTIVO;
                medicamento.setEstado(MedicamentoDiscapacidad.getEstado(string));
                
                medicamentos.add(medicamento);
                medicamento = new MedicamentoDiscapacidad();
            }
            
        }catch(SQLException e){
            e.printStackTrace();
        }
        return medicamentos;
    }
    
    public static Set<MedicamentoDiscapacidad> getMedicamentosActivos(
            DiscapacidadTratamiento discapacidadTratamiento) {

        Set<MedicamentoDiscapacidad> medicamentos =
                new HashSet<MedicamentoDiscapacidad>();
        Connection conexion = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        MedicamentoDiscapacidad medicamento = new MedicamentoDiscapacidad();

        try {
            conexion = bd.getConexion();
            statement = conexion.prepareStatement(""
                    + "select medicamento_discapacidad.*, medicamento.nombre from medicamento_discapacidad natural join medicamento "
                    + "where id_discapacidad_tratamiento = ? "
                    + "and estado ilike 'Act'");
            statement.setInt(1, discapacidadTratamiento.getId());
            rs = statement.executeQuery();
            while (rs.next()) {
                medicamento.setId(rs.getInt("id_medicamento_discapacidad"));
                medicamento.setIdMedicamento(rs.getInt("id_medicamento"));
                medicamento.setDiscapacidadTratamiento(discapacidadTratamiento);
                medicamento.setDosis(rs.getInt("dosis"));
                medicamento.setDosisMedidaTiempo(rs.getInt("dosis_medida_tiempo"));
                medicamento.setUso(rs.getInt("uso"));
                medicamento.setUsoMedidaTiempo(rs.getInt("uso_medida_tiempo"));
                medicamento.setObservacion(rs.getString("observacion"));
                medicamento.setFechaInicio(rs.getDate("fecha_inicio"));
                medicamento.setFechaFin(rs.getDate("fecha_inicio"));
                medicamento.setMedicamento(rs.getString("nombre"));

                String string = rs.getString("estado");
//                MedicamentoDiscapacidad.Estado estado = null;
//                if(string.equals(MedicamentoDiscapacidad.Estado.ACTIVO.getDesc()))
//                    estado = MedicamentoDiscapacidad.Estado.ACTIVO;
//                else
//                    estado = MedicamentoDiscapacidad.Estado.INACTIVO;
                medicamento.setEstado(MedicamentoDiscapacidad.getEstado(string));

                medicamentos.add(medicamento);
                medicamento = new MedicamentoDiscapacidad();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return medicamentos;
    }
}
